package io.gitee.skyarthur1987.leporidae.delayqueue.api;

import java.util.Date;
import java.util.List;
import java.util.concurrent.TimeUnit;

/**
 * 延迟队列
 * Created by skyarthur on 2023/1/26
 */
public interface DelayQueue<T> {

    /**
     * 往延迟队列中添加任务， 如果队列容量满，则直接返回 false
     *
     * @param task      任务
     * @param topic     主题，区分不同的延迟队列
     * @param delayTime 延迟时间
     * @param timeUnit  延迟时间单位
     * @return true 表示添加成功，false 表示添加失败
     */
    boolean add(T task, String topic, int delayTime, TimeUnit timeUnit);

    /**
     * 往延迟队列中添加任务， 如果队列容量满，则直接返回 false
     *
     * @param task        任务
     * @param topic       主题，区分不同的延迟队列
     * @param executeTime 任务执行时间，即绝对值
     * @return true 表示添加成功，false 表示添加失败
     */
    boolean add(T task, String topic, Date executeTime);

    /**
     * 获取到期任务列表
     *
     * @param topic      主题，区分不同的延迟队列
     * @param expireTime 到期时间
     * @return 任务列表
     */
    List<T> poll(String topic, Long expireTime);

}
